#!/bin/bash

# 原始文件
# ➜  sed-util git:(master) ✗ cat -n to-remove-line-file.txt 
#      1	
#      2	This is the header line.
#      3	This is the first data line.
#      4	
#      5	
#      6	
#      7	This is the second data line.
#      8	
#      9	
#     10	
#     11	
#     12	This is the last line.%   

# 区间是/./到/^$/。区间的开始地址会匹配任何含有至少一个字符的行。区间的结束地址会
# 匹配一个空行。在这个区间内的行不会被删除。
# 区间/./到/^$/ 匹配to-remove-line-file.txt文件中的[(2-4),(7-8),(12)]
# /./,/^$/! 表示非匹配的部分[(2-4),(7-8),(12)] 与 [(1-12)] 的交集 [(0),(5-6),(9-11)]
# [(0),(5-6),(9-11)] 这些空白行会被删除
echo ""
echo "=========删除不需要的空白行（多个空白行合并为一个空白行）"
sed '/./,/^$/!d' to-remove-line-file.txt

# 结果
# ➜  sed-util git:(master) ✗ ./remove-unnecessary-blank-line.sh
# This is the header line.
# This is the first data line.

# This is the second data line.

# This is the last line.%
# ➜  sed-util git:(master) ✗ 


# 删除开头的空白行
# 这个脚本用地址区间来决定哪些行要删掉。这个区间从含有字符的行开始，一直到数据流结
# 束。在这个区间内的任何行都不会从输出中删除。这意味着含有字符的第一行之前的任何行都会删除。
echo ""
echo "=========删除开头的空白行"
sed '/./,$!d' to-remove-line-file.txt